from rest_framework import mixins
from rest_framework.response import Response

from meiduo_admin.my_paginate import MyPageNumberPagination
from meiduo_admin.user import user_serializers
from rest_framework.generics import ListAPIView, CreateAPIView

from users.models import User
from meiduo_admin.user.user_serializers import MyUserDataserializer

# 获取用户的数据，展示在管理员页面

class UserDataView(ListAPIView,CreateAPIView):  # 由于涉及到获取数据，还有数据转换，所以，可以使用三级视图，ListView，它继承自二级视图GenericAPIView和mixin类。
    # 此时，只需要指定通用序列化器，和数据集，就可以完成功能
    pagination_class = MyPageNumberPagination
    serializer_class = user_serializers.MyUserDataserializer
    # queryset = User.objects.order_by(id).all() # 查出所有用户,这里的order_by，没有太大意义，只是让数据排序而已

    # 这时候,我们要实现搜索功能，数据集就不能写死，注释掉，重写
    # 要重写一个方法
    def get_queryset(self):
        keyword = self.request.query_params.get('keyword')  #request点数据集参数，还要点get才能获取到参数

        # 判断关键字是否存在
        if keyword:
            return User.objects.filter(username__contains=keyword).all() # 如果存在，把所有名字里包含关键字的都查出来
        else:
            return User.objects.order_by("id").all() #不然，就返回全部，如同最开始

    """普通序列化器增加用户方法"""
    # def post(self,request):
    #     # 获取参数
    #     dict_data = request.data
    #     # 反序列化，校验入库
    #     serializer = self.get_serializer(data=dict_data)
    #     serializer.is_valid(raise_exception=True)
    #     serializer.save()
    #     #返回
    #     return Response(serializer.data,status=201)
    """继承mixins类返回，直接方法和返回，中间不用写"""
    # def post(self,request):
    #     return self.create(request)
    """继承CreateAPIView就更加厉害，连post方法都不用写，因为它已经写了这两个方法"""






